home *** CD-ROM | disk | FTP | other *** search
- /***
- * Created by Bill Hubauer on Fri, Jun 21, 1996 @ 2:53 AM.
- *
- ***/
-
-
- #ifndef __BlasteroidsShipSprite_H__
- #include "BlasteroidsShipSprite.h"
- #endif
-
-
- static void CalculateDeltaHDeltaV(short radius, short variant, short& deltaH, short& deltaV)
- {
- switch (variant)
- {
- case 0:
- case 12:
- deltaV = -radius ;
- deltaH = 0;
- break;
- case 6:
- case 18:
- deltaV = 0;
- deltaH = radius;
- break;
- case 1:
- case 11:
- case 13:
- case 23:
- deltaV = -23 * radius / 25;
- deltaH = 10 * radius / 25;
- break;
- case 2:
- case 10:
- case 14:
- case 22:
- deltaV = -20 * radius / 25;
- deltaH = 15 * radius / 25;
- break;
- case 3:
- case 9:
- case 15:
- case 21:
- deltaV = -18 * radius / 25;
- deltaH = 18 * radius / 25;
- break;
- case 4:
- case 8:
- case 16:
- case 20:
- deltaV = -15 * radius / 25;
- deltaH = 20 * radius / 25;
- break;
- case 5:
- case 7:
- case 17:
- case 19:
- deltaV = -10 * radius / 25;
- deltaH = 23 * radius / 25;
- break;
- }
-
- if (variant >= 18)
- deltaH = -deltaH;
- else if (variant >= 12)
- {
- deltaH = -deltaH;
- deltaV = -deltaV;
- }
- else if (variant >= 6)
- deltaV = -deltaV;
- }
-
-
- static short Sign(short value)
- {
- if (value < 0)
- return -1;
- if (value > 0)
- return 1;
- return 0;
- }
-
-
- void CBlasteroidsShipSprite::UpdatePosition() //Override
- {
- if(SpaceDownQ()){
- FireGun();
- }
-
- short newHPos = GetLocation()->left;
- short newVPos = GetLocation()->top;
- const Rect& bounds = *GetGameBounds();
-
- if (LeftArrowQ())
- fShipVariant = (fShipVariant + 24 - 1) % 24;
- else if (RightArrowQ())
- fShipVariant = (fShipVariant + 24 + 1) % 24;
- SetImageID(fShipId + fShipVariant);
-
- if (DownArrowQ())
- {
- PlaySound(5004);
- short deltaH, deltaV;
-
- fSpeed += 2;
- if (fSpeed < 6)
- fSpeed = 6;
- else if (fSpeed > 15)
- fSpeed = 15;
-
- CalculateDeltaHDeltaV(fSpeed, fShipVariant, deltaH, deltaV);
- newHPos += deltaH;
- newVPos += deltaV;
- fHMomentum = deltaH;
- fVMomentum = deltaV;
- }
-
- newHPos += fHMomentum;
- newVPos += fVMomentum;
- fHMomentum -= Sign(fHMomentum);
- fVMomentum -= Sign(fVMomentum);
- fSpeed -= Sign(fSpeed);
- MoveTo(newHPos, newVPos);
-
- if (fLocation.left < bounds.left)
- MoveToH(bounds.right);
- if (fLocation.left > bounds.right)
- MoveToH(bounds.left);
- if (fLocation.top < bounds.top)
- MoveToV(bounds.bottom);
- if (fLocation.top > bounds.bottom)
- MoveToV(bounds.top);
- }
-
-
- static short CalcShipTop(CSpriteWorld* world)
- {
- const Rect& bounds = *(world->GetSpriteCanvas()->GetBounds());
-
- return (bounds.bottom + bounds.top - 32) / 2;
- }
-
-
- inline short RectWidth(const Rect& r)
- {
- return r.right - r.left;
- }
-
-
- static short CalcShipLeft(CSpriteWorld* world)
- {
- const Rect& bounds = *(world->GetSpriteCanvas()->GetBounds());
-
- return (bounds.left + bounds.right - 32) / 2;
- }
-
-
- CBlasteroidsShipSprite::CBlasteroidsShipSprite(CSpriteWorld* world,CSpriteGame* game)
- : CGameSprite(world, game, 0,game->GetImage(5000), CalcShipTop(world),
- CalcShipLeft(world), game->GetImageMask(5000))
- {
- fHMomentum = 0;
- fVMomentum = 0;
- fSpeed = 0;
- fShipId = 5000;
- fShipVariant = 0;
- }
-
-
- CBlasteroidsShipSprite::~CBlasteroidsShipSprite()//Override
- {
- }
-
-
- Boolean CBlasteroidsShipSprite::LeftArrowQ()
- {
- return KeyIsDownQ(0x7B);
- }
-
-
- Boolean CBlasteroidsShipSprite::RightArrowQ()
- {
- return KeyIsDownQ(0x7C);
- }
-
-
- Boolean CBlasteroidsShipSprite::UpArrowQ()
- {
- return KeyIsDownQ(0x7E);
- }
-
-
- Boolean CBlasteroidsShipSprite::DownArrowQ()
- {
- return KeyIsDownQ(0x7D);
- }
-
-
- Boolean CBlasteroidsShipSprite::SpaceDownQ()
- {
- return KeyIsDownQ(0x31);
- }
-
-
- void CBlasteroidsShipSprite::FireGun()
- {
- short deltaV,deltaH;
-
- CalculateDeltaHDeltaV(fSpeed+25, fShipVariant, deltaH, deltaV);
- new CBlasteroidsBulletSprite(GetWorld(), GetGame(), GetLocation()->top, GetLocation()->left,
- deltaV, deltaH);
- }
-
-
- CBlasteroidsBulletSprite::CBlasteroidsBulletSprite(CSpriteWorld* world,CSpriteGame* game,short startTop,short startLeft,
- short deltaV,short deltaH)
- : CGameSprite(world, game, 0, game->GetImage(5100), startTop, startLeft,
- game->GetImageMask(5100)),
- fDeltaV(deltaV),
- fDeltaH(deltaH)
- {
- PlaySound(5001);
- }
-
-
- CBlasteroidsBulletSprite::~CBlasteroidsBulletSprite()//Override
-
- {
-
- }
-
-
- void CBlasteroidsBulletSprite::UpdatePosition()//Override
- {
- MoveBy(fDeltaH,fDeltaV);
- if(OutOfBoundsQ()){
- delete this;
- }
- }
-